def cache_deco(func):
    cache = {}

    def wrapper(n):
        if n in cache:
            return cache[n]
        result = func(n)
        cache[n] = result
        return result
    return wrapper


@cache_deco
def fibo(n):
    print("called")
    if n < 2:
        return n
    return fibo(n - 1) + fibo(n - 2)

print(fibo(10))
print('before cache')
print(fibo(11))


'''
迭代器（数据上的传输）：是一个未知长度的数据流，通过next来获取下一个元素
生成器（指令上的执行）：是一个特殊的迭代器，提供了惰性延迟的功能，在函数使用yield关键字
'''
